﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using EntitiesAndMappings.Entities;
using ProyectoActivos.Const;
using ProyectoActivos.Daos;

namespace ProyectoActivos.Forms.Mantenimiento
{
    public partial class FrmMantenimientoEntidadGenericaHelper<T> : FrmMantenimientoEntidadGenerica where T : EntidadGenerica, new()
    {

        //   private FrmCrearEntidadGenerica<T> frmCrearEntidadGenerica;

        public static FrmMantenimientoEntidadGenericaHelper<T> Activo { set; get; }

        protected EntidadGenericaDAO<T> DAO;

        public FrmMantenimientoEntidadGenericaHelper()
        {
            if (Activo == null)
            {
                Activo = this;
            }
            Closed += EnCierre;
            Visible = false;
            DAO = new EntidadGenericaDAO<T>();
            dGridResultado.AutoGenerateColumns = false;

            ActualizarLista();
        }

        private IList<T> ActualizarLista()
        {
            IList<T> lista = DAO.ListarTodos();

            dGridResultado.DataSource = lista;

            if (lista != null)
            {
                return lista;
            }

            tStripButtonDesactivar.Visible = false;
            tStripButtonReactivar.Visible = false;

            dGridResultado.ClearSelection();

            return new List<T>();
        }


        private void EnCierre(object sender, EventArgs e)
        {
            Activo = null;
        }

        protected override void tStripButtonCrear_Click(object sender, System.EventArgs e)
        {
            // frmCrearEntidadGenerica.ShowDialog(this);

            var form = new FrmCrearEntidadGenerica<T>(new T(), DAO);
            form.CadenaDescriptivaEntidad = this.CadenaDescriptivaEntidad;
            form.ShowDialog(this);
            ActualizarLista();
        }

        protected override void tStripButtonModificar_Click(object sender, System.EventArgs e)
        {
            // frmCrearEntidadGenerica.ShowDialog(this);
            if (dGridResultado.CurrentRow == null)
            {
                return;
            }

            var entidadGenerica = (EntidadGenerica)dGridResultado.CurrentRow.DataBoundItem;
            var form = new FrmCrearEntidadGenerica<T>(entidadGenerica, DAO)
                           {
                               Text = @"Modificación de {0}",
                               CadenaDescriptivaEntidad = this.CadenaDescriptivaEntidad
                           };
            form.DeshabilitarEdicionDeCodigo();
            form.ShowDialog(this);
            ActualizarLista();
        }

        protected override void tStripButtonDesactivar_Click(object sender, EventArgs e)
        {
            if (dGridResultado.CurrentRow == null)
            {
                return;
            }

            var entidadGenerica = (EntidadGenerica)dGridResultado.CurrentRow.DataBoundItem;
            entidadGenerica.Estado = Estado.Inactivo;
            DAO.Update(entidadGenerica as T);
            ActualizarLista();
        }

        protected override void tStripButtonReactivar_Click(object sender, EventArgs e)
        {
            if (dGridResultado.CurrentRow == null)
            {
                return;
            }

            var entidadGenerica = (EntidadGenerica)dGridResultado.CurrentRow.DataBoundItem;
            entidadGenerica.Estado = Estado.Activo;
            DAO.Update(entidadGenerica as T);
            ActualizarLista();
        }

        protected override void dGridResultado_SelectionChanged(object sender, EventArgs e)
        {

            if (dGridResultado.SelectedRows.Count > 0)
            {
                if (dGridResultado.SelectedRows[0].Cells["Estado"].Value.ToString().CompareTo("I") == 0)
                {
                    tStripButtonDesactivar.Visible = false;
                    tStripButtonReactivar.Visible = true;
                }
                else
                {
                    tStripButtonDesactivar.Visible = true;
                    tStripButtonReactivar.Visible = false;

                }
            }
        }

        protected override void dGridResultado_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (dGridResultado.Rows[e.RowIndex].Cells["Estado"].Value.ToString().CompareTo("I") == 0)
            {
                e.CellStyle.Font = new Font(dGridResultado.Font, FontStyle.Bold);
                e.CellStyle.BackColor = Color.Turquoise;
            }
        }

    }
}
